1.概念

列表是一组有序数据的集合,其中的每项数据被称为 元素 。在js中,列表中的元素可以是任意数据类型。列表中可以保存任意多个元素(在实际使用时会受到程序内存的限制)。

2.属性和方法

列表中有一些常见的属性和方法,下面一一列举:

  • listSize(属性) :列表的元素个数
  • position(属性) :列表当前的位置
  • clear(方法):清空列表中的所有元素
  • getElement(方法):获取当前位置上的元素
  • find(方法) :在列表中查找一个元素
  • insert(方法) :在现有元素后插入新元素
  • append(方法):在列表末尾插入新元素
  • remove(方法):从列表删除元素
  • front(方法):将列表的当前位置移动到第一个元素
  • end(方法):将列表的当前位置移动到最后一个元素
  • prev(方法) :将当前位置向前移动一位
  • next(方法):将当前位置向后移动一位
  • moveTo(方法):将当前位置移动到指定位置

3.JS代码实现一个列表类

我们先定义一个列表类,将列表的属性和方法包装在类里

function List(){
    this.dataSet = []//初始化一个空数组来保存列表元素
    this.pos = 0//初始化一个属性表示列表当前的位置
    this.listSize = 0 //初始化一个属性表示列表元素个数
    this.clear = clear;//清空列表里的元素
    this.find = find;//在列表上查找一个元素
    this.getElement = getElement;//返回当前位置的元素
    this.toString = toString;//将列表作为字符串展示
    this.insert = insert;//在当前元素后插入新元素
    this.append = append;//在列表末尾插入新元素
    this.remove = remove;//从列表中删除元素
    this.front = front;//将当前位置移到列表头部
    this.end = end;//将当前位置移到最后一个元素
    this.prev = prev;
    this.next = next
    this.currPos = currPos;
    this.moveTo = moveTo;
    this.contains = contains;
}

有了这个类,我们就可以执果索因,一步步将完整的构造函数写出来

3.1 实现clear 方法

function clear(){
    delete this.dataSet;//删除原来的dataSet
    this.dataSet = [];//将新数组赋给dataSet
    this.pos = this.listSize = 0;//将数组当前位置和数组长度初始化为0
}

3.2 实现find 方法

function find(element){
    for(var i=0;i<this.dataSet.length;i++){
        if(this.dataSet[i]===element){
            return i //若找到了element,则返回该元素的位置
        }
    }
    return -1 //若没有在dataSet中找到element,则返回-1

}

3.3 实现getElement 方法

function getElement(pos){
    return this.dataSet[this.pos]
}

3.4 实现toString 方法

function toString(){
    return this.dataSet
}

3.5 实现insert 方法

function insert(element){
    this.dataSet.splice(this.pos,0,element);
}

3.6 实现append 方法

function append(element){
    this.dataSet[this.listSize++]=element;
}

3.7 实现remove方法

function remove(element){
    var nowPos = this.find(element);
    if(nowPos>-1){
        this.dataSet.splice(nowPos,1)
        this.listSize—-; //删除元素后要把listSize也减一
        return true //删除成功,则返回true
    }
    return false //若删除不成功,则返回false
}

3.8 实现六个操作position的方法

function front(){
    this.pos = 0;
}

function end(){
    this.pos = this.listSize-1
}
function prev(){
    if(this.pos>0){
        this.pos—-
    }
}

function next(){
    if(this.pos<this.listSize-1){
        this.pos++
    }
}

function currPos(){
    return this.pos
}

function moveTo(newPos){
    if(newPos>=0&&newPos<=this.listSize-1){
        this.pos = newPos
    }
}

3.9 实现contains方法

function contains(element){
    var res = this.find(element);
    if(res>-1){
        return true
    }else{
        return false
    }
}

CatherineYF
167 声望3 粉丝